home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / wink24h / src / moji.c < prev    next >
Text File  |  1994-06-01  |  2KB  |  96 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fmcfrb.h>
  4. #include "defs.h"
  5. extern int  strlen();
  6.  
  7.  
  8. /*
  9.  *    1文字入力
  10.  *
  11.  *
  12.  */
  13. void MOJI_input1Char(UCHAR *moji_area,unsigned int ky
  14.                 ,int max_moji,int *lcur_x)
  15. {
  16.     unsigned int l;
  17.     char    dmy[80];
  18.     int    cur_x,tst_x,before_x;
  19.  
  20.     
  21.     if (ky == 0xFFFF) return;
  22.  
  23.     cur_x = *lcur_x;
  24.     if (cur_x > strlen(moji_area)) cur_x = strlen(moji_area);
  25.     if (cur_x == max_moji) cur_x = max_moji-1;
  26.  
  27.  
  28.     switch (ky) {
  29.     case 0x8: /* BS */
  30.         if (cur_x != 0) {
  31.             if ( cur_x > 1 && iskanji(*(moji_area+cur_x - 2))) {
  32.                 cur_x -= 2;
  33.                 strcpy(moji_area+cur_x,moji_area+cur_x+2);
  34.             } else {
  35.                 cur_x--;
  36.                 strcpy(moji_area+cur_x,moji_area+cur_x+1);
  37.             }
  38.         }
  39.         break;
  40.     case 0x7f:  /* DEL */
  41.         l = strlen(moji_area);
  42.         if (l != 0 && l >= (cur_x+1)) {
  43.             if (l == 1 || iskanji(*(moji_area+cur_x)) == 0) {
  44.                 strcpy(moji_area+cur_x,moji_area+cur_x+1);
  45.             } else {
  46.                 strcpy(moji_area+cur_x,moji_area+cur_x+2);
  47.             }
  48.         }
  49.         break;
  50.  
  51.     case 0x1d: /* ← */
  52.         tst_x = before_x = 0;
  53.         while (cur_x != tst_x && tst_x <max_moji) {
  54.             before_x = tst_x;
  55.             if (iskanji(*(moji_area+tst_x)))
  56.                 tst_x += 2;
  57.             else
  58.                 tst_x++;
  59.             
  60.         }
  61.         cur_x = before_x;
  62.         break;
  63.     case 0x1c: /* → */
  64.         if (cur_x != strlen(moji_area)) {
  65.             if (iskanji(*(moji_area+cur_x))) {
  66.                 cur_x = cur_x + 2;
  67.             } else {
  68.                 cur_x++;
  69.             }
  70.             if (cur_x > max_moji-1) cur_x = max_moji-1;
  71.         }
  72.         break;
  73.     case 0x0d: /* ret */
  74.         break;
  75.     default:
  76.         if (strlen(moji_area) != max_moji-1 || iskanji(ky) == FALSE) {
  77.             if (strlen(moji_area) < max_moji && ky < 255 && ky > 31) {
  78.             if (cur_x == strlen(moji_area)) {
  79.                 *(moji_area+cur_x) = ky;
  80.                 *(moji_area+cur_x+1) = '\0';
  81.             } else {
  82.                 strcpy(dmy,moji_area+cur_x);
  83.                 strcpy(moji_area+cur_x+1,dmy);
  84.                 *(moji_area+cur_x) = ky;
  85.             }
  86.             cur_x++;
  87.             if (cur_x > max_moji-1) cur_x = max_moji-1;
  88.             }
  89.         }
  90.         break;
  91.     }
  92.  
  93.     *lcur_x = cur_x;
  94.  
  95. }
  96.